import axios, { AxiosResponse } from "axios";
import { ElMessage } from "element-plus";
import store from "@/store";
import router from "@/router";

interface ResponseData<T = any> {
  code: number;
  msg: string;
  data?: T;
}

interface LoginParams {
  username: string;
  password: string;
}

const service = axios.create({
  baseURL: "/api", // 通过网关访问，需要/api前缀
  timeout: 5000,
});

service.interceptors.request.use(
    (config) => {
        const token = localStorage.getItem("token");
        if (token) {
            config.headers["Authorization"] = `Bearer ${token}`;
        }
        return config;
    },
    (error) => {
        console.error("请求错误:", error);
        return Promise.reject(error);
    }
);

service.interceptors.response.use(
  (response: AxiosResponse): Promise<AxiosResponse> | AxiosResponse => {
    const res = response.data;

    // 根据后端接口约定，code === 1 或 code === 200 表示成功
    if (res.code === 1 || res.code === 200) {
      return response;
    }

    // 处理特定错误码
    switch (res.code) {
      case 401:
        store.dispatch("logout");
        router.push("/login");
        ElMessage.error("登录已过期，请重新登录");
        break;
      case 403:
        ElMessage.error("您没有权限执行此操作");
        break;
      case 404:
        ElMessage.error("请求的内容不存在");
        break;
      default:
        // 使用更友好的错误信息
        ElMessage.error(res.msg || "操作失败，请稍后再试");
    }

    return Promise.reject(new Error(res.msg || "请求失败，请检查网络连接"));
  },
  (error) => {
    // 根据错误类型提供更友好的错误信息
    if (error.message.includes('timeout')) {
      ElMessage.error("请求超时，请检查您的网络连接");
    } else if (error.message.includes('Network Error')) {
      ElMessage.error("网络连接失败，请检查您的网络设置");
    } else {
      ElMessage.error("连接服务器失败，请稍后再试");
    }
    return Promise.reject(error);
  }
);

export default service;
